import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
import fs from 'fs';
// import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/resource.js';
// npx @modelcontextprotocol/inspector 启动页面
const server = new McpServer({
    name: 'my mcp server',
    title: 'my mcp server',
    version: '0.1.0',
})

// 资源是您向LLM公开数据的方式。它们类似于REST API中的GET端点-它们提供数据，但不应该执行大量计算或产生副作用：
// server.registerResource(
//     "echo",
//     // { list: undefined } 声明资源支持的操作类型（如 list、get 等），这里一般可以写成 {} 或 { list: undefined }，表示支持 list 操作。
//     new ResourceTemplate("echo://{message}", { list: undefined }),
//     {
//         title: "Echo Resource",
//         description: "Echoes back messages as resources"
//     },
//     // 请求的完整 URI 对象（如 echo://hello）。
//     async (uri, { message }) => ({
//         contents: [{
//             uri: uri.href,
//             text: `Resource echo: ${message}`
//         }]
//     })
// );

// 工具注册C:\nvm4w\nodejs\node.exe
server.registerTool('sum', {
    title: '两数求和',
    description: 'sum two numbers',
    inputSchema: {
        a: z.number().describe('第一个数'),
        b: z.number().describe('第二个数'),
    },

},
    ({ a, b }) => {
        // console.error(123);
        // 要打印信息只能写error,错误会打印，info会污染标准格式会报错
        return {
            // 按格式返回
            content: [
                {
                    type: 'text',
                    text: `执行输出：${a}+${b}=${a + b}`
                }
            ]

        }
    })

server.registerTool('createFile', {
    title: '创建文件',
    description: 'create a file',
    inputSchema: {
        name: z.string().describe('文件名'),
        content: z.string().describe('文件内容'),
    },
},

    ({ name, content }) => {
        try {
            fs.writeFileSync(name, content);
            return {
                content: [
                    {
                        type: 'text',
                        text: `文件${name}创建成功`
                    }
                ]
            }
        }
        catch (error) {
            return {
                content: [
                    {
                        type: 'text',
                        text: `文件${name}创建失败`
                    }
                ]
            }
        }
    }

)

// 用于在 MCP Server 中注册自定义 Prompt（提示词/对话模板）的 API。它允许你为 AI 应用或客户端定义可复用的对话模板、系统提示等。
// 返回格式是messages[]，Message是{
server.registerPrompt(
    "review-code",
    {
        title: "Code Review",
        description: "Review code for best practices and potential issues",
        argsSchema: { code: z.string() }
    },
    ({ code }) => ({
        messages: [{
            role: "user",
            content: {
                type: "text",
                text: `Please review this code:\n\n${code}`
            }
        }]
    })
);


// 服务启动
const transport = new StdioServerTransport();

server.connect(transport);
